#include <opencv2/opencv.hpp>

int main(int argc, char** argv){
    // 载入一张图像，cv::imread()依据文件名来决定载入图像格式的处理，这也会自动地申请图像需要的内存；可以读取很多种图像格式
    // 函数会返回一个cv::Mat结构
    //OpenCV使用这个结构来处理所有类型的图像：单通道、多通道、整型、浮点型等
    cv::Mat img = cv::imread(argv[1],-1);
    
    // 检查这个图像是否被载入了
    if(img.empty()) return -1;

    // 在屏幕打开一个窗口，其中可以包含需要显示的图片
    // 这个函数由HighGUI模块提供，会将一个名称赋予窗口，比如这里的Example1
    // CV::namedWindow的第二个参数说明了窗口的属性，窗口的大小将会和载入的图像的大小一致
    cv::namedWindow("Example1", cv::WINDOW_AUTOSIZE);

    // 创建一个窗口，显示图像
    cv::imshow("Example1", img);
    
    // 函数告诉系统暂停并且等待键盘事件，如果其传入了一个大于0的参数，它将会等待等同于该参数的毫秒时间，记住是毫秒
    // 如果传入了0或者-1，程序将会无限等待直到有键被按下
    cv::waitKey(0);

    // 让窗口自行销毁
    cv::destroyWindow("Example1");
    return 0;
}